原文地址:https://stackoverflow.com/a/27956263/6091500
亲测可用。
测试用机: 小米 2S Android 5.0
1 2 3 4 5 6 7 8 9 10 11 12
| HomeWatcher mHomeWatcher = new HomeWatcher(this); mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() { @Override public void onHomePressed() { ALog.i(TAG, "***** ===== onHomePressed() ===== *****"); } @Override public void onHomeLongPressed() { ALog.i(TAG, "***** ===== onHomeLongPressed() ===== *****"); } }); mHomeWatcher.startWatch();
|
1 2 3 4
| public interface OnHomePressedListener { public void onHomePressed(); public void onHomeLongPressed(); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter;
public class HomeWatcher { private static final String TAG = HomeWatcher.class.getSimpleName(); private Context mContext; private IntentFilter mFilter; private OnHomePressedListener mListener; private InnerRecevier mRecevier; public HomeWatcher(Context context) { mContext = context; mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); } public void setOnHomePressedListener(OnHomePressedListener listener) { mListener = listener; mRecevier = new InnerRecevier(); } public void startWatch() { if (mRecevier != null) { mContext.registerReceiver(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiver(mRecevier); } } class InnerRecevier extends BroadcastReceiver { final String SYSTEM_DIALOG_REASON_KEY = "reason"; final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions"; final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps"; final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey"; final String SYSTEM_DIALOG_REASON_LONG_PRESS = "assist"; final String SYSTEM_DIALOG_REASON_VOICE_INTERACTION = "voiceinteraction"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY); if (reason != null) { ALog.e(TAG, "action:" + action + ",reason:" + reason); if (mListener != null) { if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) { mListener.onHomePressed(); } else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) { mListener.onHomeLongPressed(); } else if (reason.equals(SYSTEM_DIALOG_REASON_LONG_PRESS)) { mListener.onHomeLongPressed(); } else if (reason.equals(SYSTEM_DIALOG_REASON_VOICE_INTERACTION)) { mListener.onHomeLongPressed(); } } } } } } }
|